<?php
/**
 * Created by PhpStorm.
 * User: edmmss
 * Date: 2021/9/27
 * Time: 16:23
 */

namespace Edmmss\Easyswoole\Task\Client;

use Edmmss\Common\Pack;

abstract class ClientAbstract
{
    /**
     * @var string rpc主机
     */
    public $serverHost;

    /**
     * @var int rpc端口
     */
    public $serverPort;

    /**
     * @var int 客户端连接超市时间
     */
    public $timeout = Client::DEFAULT_SYNC_WAIT_TIME;

    /**
     * @var string 原始返回值
     */
    public $originalResult;

    /**
     * @var bool 是否开启长度检查
     */
    public $openLengthCheck = true;

    /**
     * @var string 长度值的类型，N => 无符号、网络字节序、4字节
     */
    public $packageLengthType = 'N';

    /**
     * @var int 包长度偏移量，第N个字节是包长度的值
     */
    public $packageLengthOffset = 0;

    /**
     * @var string 第几个字节开始计算长度
     */
    public $packageBodyOffset = Pack::PACK_HEADER_SIZE;

    /**
     * @var int 协议最大长度，数据包大小，最大不超过2M的数据包
     */
    public $packageMaxLength = 2465792;

    /**
     * @var callable 回调函数
     */
    public $callBack;

    /**
     * 请求
     *
     * @date   2021/9/28
     * @param $call
     * @param $taskType
     * @param array $params
     * @return mixed
     * @author edmmss
     */
    abstract public function request($call, $taskType, $params = []);

    /**
     * 生成請求串號
     *
     * @date   2018/8/4
     * @return int
     * @author edmmss
     */
    public static function getRequestId()
    {
        $us = strstr(microtime(), ' ', true);

        return (int)(strval($us * 1000 * 1000) . rand(100, 999));
    }
}